# -*- coding:latin-1 -*-

#####################################
# Date: 05/04/10                    #
# Auteur: Rigaut Maximilien         #
# Nom: Gomoku  [loadModule]         #
# Version: 1.0                      #
# Copyright 2010: Rigaut Maximilien #
#####################################
#    This file is part of Gomoku.
#
#    Gomoku is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    Gomoku is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with Gomoku.  If not, see <http://www.gnu.org/licenses/>.
#################################

#======================+
#  Modules             |
#----------------------+

import cPickle,os
#======================+
#  Variables internes  |
#----------------------+
cwd=os.getcwd()

#======================+
#  Fonctions internes  |
#----------------------+
def savePrefs():
    "Sauvegarde les Preferences"
    pref=open(filePref, 'w')
    p=cPickle.Pickler(pref)
    p.dump(nomJoueur)
    p.dump(langue)
    p.dump(preset)
    p.dump(taille)
    p.dump(tailleCarreau)
    p.dump(apparence)
    p.dump(colors)
    p.dump(starts)
    p.dump(level)
    pref.close()
    return True

def savePyBackup():
    pref=open(filePref+'.py', 'w')
    pref.write("nomJoueur='"+str(nomJoueur)+"'\n")
    pref.write("langue="+str(langue)+"\n")
    pref.write("preset="+str(preset)+"\n")
    pref.write("taille="+str(taille)+"\n")
    pref.write("tailleCarreau="+str(tailleCarreau)+"\n")
    pref.write('apparence='+str(apparence)+'\n')
    pref.write("colors="+str(colors)+"\n")
    pref.write("starts="+str(starts)+"\n")
    pref.write("level="+str(level)+"\n")
    pref.close()
    return True

def changePref(preferenceACharger,valeur):
    "[String] Fonction s'appelant comme ceci, changepref('taille','[15,15]')."
    global nomJoueur,langue,preset,taille,tailleCarreau,apparence,colors,starts,level
    loadPrefs()
    if preferenceACharger=='nomJoueur':
        nomJoueur=str(nomJoueur)
    if preferenceACharger=='langue':
        langue=eval(valeur)
    if preferenceACharger=='preset':
        preset=eval(valeur)
    if preferenceACharger=='taille':
        taille=eval(valeur)
    if preferenceACharger=='tailleCarreau':
        tailleCarreau=eval(valeur)
    if preferenceACharger=='apparence':
        apparence=eval(valeur)
    if preferenceACharger=='colors':
        colors=eval(valeur)
    if preferenceACharger=='starts':
        starts=str(valeur)
    if preferenceACharger=='level':
        level=eval(valeur)
    savePrefs()
def changePreset(pref):
    "[String,String]=>[Val]: Charge un preset !"
    lines=loadFileLines('./Preferences/Presets.txt')
    lignes=eval(lines[0])
    return lines[lignes[pref]]
def loadPrefs():
    """Retourne langue[Dictionnaire],tailleCarreau [int],background [chaine],colors [tableau] si rien n'est precise.\n Sinon, retourne les preferences demandees.\n Les preferences sont a preciser sous la forme 'taille' ou 'tailleCarreau'."""
    global nomJoueur,langue,preset,taille,tailleCarreau,apparence,colors,starts,level
    pref=open(filePref, 'r')
    p=cPickle.Unpickler(pref)
    nomJoueur=p.load()
    langue=p.load()
    preset=p.load()
    taille=p.load()
    tailleCarreau=p.load()
    apparence=p.load()
    colors=p.load()
    starts=p.load()
    level=p.load()
    pref.close()
def loadFile(nomText):
    "[String]=>[String], ouvre le fichier nomText et renvoie son texte."
    fichier=open(nomText,'r')
    text=fichier.read()
    fichier.close()
    return text
def loadFileLines(nomText):
    "[String]=>[Array], ouvre le fichier nomText et renvoie ses lignes."
    fichier=open(nomText,'r')
    lines=fichier.readlines()
    fichier.close()
    return lines
def addHighscore(time):
    try:
        text=loadFile('./modules/6772656564696e6773.bob')
        text=devert(text)
        text=eval(text)
    except:
        text=[[130420,124242],['ChAn','15x15',130420,42,10],['Barreur13','13x13',124242,42,10]]
        regen(convert(str(text)))
    if nomJoueur=='42':
        time=-1
    if nomJoueur=='Mr 42':
        time=-42
    # Definition du score
    sc=int(1000*(1/time+2./(taille[0]+taille[1])+1./len(playedCases))*int(level*10)**3)
    if sc>=text[0][-1] or len(text[0])<=10:
        # Positionnement du Hi-Sc
        i,maxi=0,0
        while text[0][i]>sc:
            i+=1
            if i==len(text[0]):
                break
        text[0][i:i]=[sc] # Indice pour le tri
        text[i+1:i+1]=[[nomJoueur,str(taille[0])+'x'+str(taille[1]),sc,int(time),int(level*10)]]
        # Ecriture
        text=convert(text[:11])
        hs=open('./modules/6772656564696e6773.bob', 'w')
        hs.write(text)
        hs.close()
def readHighscore():
    text=devert(loadFile('./modules/6772656564696e6773.bob'))
    text=eval(text)
    return text[1:]
def convert(text):
    text=str(text)
    code=''
    for lettre in text:
        code+='0'*(3-len(str(ord(lettre)-42/2)))+str(ord(lettre)-42/2)
    return code
def devert(text):
    text=str(text)
    ln=len(text)
    i=0
    code=''
    while i<ln-2:
        code+=chr(int(text[i:i+3])+42/2)
        i+=3
    return code
def regen(level10):
    dp('Convertion:'+str(level10))
    dp('Deversion:'+str(devert(level10)))
    hs=open('./Modules/6772656564696e6773.bob', 'w')
    hs.write(level10)
    #hs.write('\n'+devert(conv))
    hs.close()